﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Helena.Models;

namespace Helena.Areas.Configuraciones.Models
{
    public class LogicaLocal:InterfazLogicaLocal
    {
        DBContext Local_contexto = new DBContext();
        DBGenericQueriesUtil<Local> Tabla;
        DBGenericQueriesUtil<Configuracion> tabla_configuracion;

        #region Comun

        public DBContext context_publico { get { return Local_contexto; } }

        public LogicaLocal()
        {
            Tabla = new DBGenericQueriesUtil<Local>(Local_contexto, Local_contexto.t_Local);
            tabla_configuracion = new DBGenericQueriesUtil<Configuracion>(Local_contexto, Local_contexto.t_configuracion);
        }



        public void i_AgregarLocal(LocalView local) 
        {
            Tabla.agregarElemento(local.deserializa(this));
        }

        public void i_ModificarLocal(LocalView local) 
        {
            Local l = local.deserializa(this);
            Tabla.modificarElemento(l, l.ID);
        }

        public void i_EliminarLocal(int id) 
        {
            Tabla.eliminarElemento(id); 
        }

        public List<LocalView> i_RetornarLocales() 
        {
            List<Local> l = Tabla.retornarTodos();
            List<LocalView> l_v = new List<LocalView>();

            foreach (Local local in l) l_v.Add(new LocalView(local));
            return l_v;
        }

        public LocalView i_RetornarLocal(int id) 
        {
            Local p = Tabla.retornarUnSoloElemento(id);
            LocalView p_v = new LocalView(p);
            return p_v;
        }

        #endregion

        #region Configuraciones

    public List<ConfiguracionView> i_RetornarConfiguraciones()// solo hay un local 1
    {
        List<Configuracion> c = tabla_configuracion.retornarTodos();
        List<ConfiguracionView> salida = new List<ConfiguracionView>();
        foreach (Configuracion d in c)
        {
            if (d.Estado==true)
            {
                ConfiguracionView temp = new ConfiguracionView(d);
                salida.Add(temp);
            }
        }
        return salida;
    }
    
        public ConfiguracionView i_RetornarUnaConfiguraciones(int ID)
        {
            Configuracion c = tabla_configuracion.retornarUnSoloElemento(ID);
            ConfiguracionView salida = new ConfiguracionView(c);
            return salida;

        }

        
        public void i_AgregarConfiguracion(int id, ConfiguracionView conf) 
        {
            Configuracion c =new Configuracion();
            c.ID=conf.ID;
            c.Estado=conf.Estado;
            c.Fecha=conf.Fecha;
            c.Local=Tabla.retornarUnSoloElemento(1);
            c.LocalID = Tabla.retornarUnSoloElemento(1).ID;
            c.TipoCambio=conf.TipoCambio;
            c.ValorIGV=conf.ValorIGV;

            tabla_configuracion.agregarElemento(c);
        }

        public void i_ModificarConfiguracion(int id, ConfiguracionView configuracion) 
        {
            Local local = Tabla.retornarUnSoloElemento(id);
            Configuracion c = new Configuracion();
            c = tabla_configuracion.retornarUnSoloElemento(configuracion.ID);
            c.Fecha = configuracion.Fecha;
            c.TipoCambio = configuracion.TipoCambio;
            c.ValorIGV = configuracion.ValorIGV;
            tabla_configuracion.modificarElemento(c, c.ID);
        }

        public void i_EliminarConfiguracion(int id, ConfiguracionView configuracion) 
        {
            Configuracion c = new Configuracion();
            c=tabla_configuracion.retornarUnSoloElemento(configuracion.ID);
            tabla_configuracion.eliminarElemento_logico(c.ID);
        }

        #endregion
    }
}